package com.njwangbo.day08.demo03.dao.impl;

import com.njwangbo.day08.demo03.dao.StudentDao;
import com.njwangbo.day08.demo03.entity.Student;

public class StudentDaoImpl implements StudentDao {
    private static Student[] students = new Student[0];

    //通过学号查找学生
    @Override
    public Student findStudentByNo(int no) {
        if (students.length != 0) {
            for (int i = 0; i < students.length; i++) {
                if (students[i].getNo() == no) {
                    return students[i];//找到学生，返回学生对象
                }
            }
        }
        return null;//未找到学生，返回null
    }

    //通过姓名查找学生
    @Override
    public Student findStudentByName(String name) {
    if (students.length != 0) {
            for (int i = 0; i < students.length; i++) {
                if (students[i].getName().equals(name)) {
                    //找到所有的匹配学生，返回学生对象
                    return students[i];
                }
            }
        }
        return null;
    }

    //按照成绩从大到小排序学生
    @Override
    public Student[] sortStudents() {
        // 创建一个临时数组，用于存储学生信息
        Student[] tempStudents = new Student[students.length];
        // 将原数组的元素复制到临时数组中
        for (int i = 0; i < students.length; i++) {
            tempStudents[i] = students[i];
        }
        // 使用冒泡排序算法对学生按成绩从大到小排序
        for (int i = 0; i < tempStudents.length - 1; i++) {
            for (int j = i+1; j < tempStudents.length; j++) {
                if (tempStudents[i].getScore() < tempStudents[j].getScore()) {
                    // 交换位置
                    Student temp = tempStudents[i];
                    tempStudents[i] = tempStudents[j];
                    tempStudents[j] = temp;
                }
            }
        }
        //返回
        return tempStudents;
    }

    //添加学生
    @Override
    public void insertStudent(Student student) {
        // 创建一个新的数组，长度为原数组长度加1
        Student[] tempStudent = new Student[students.length + 1];
        // 将原数组的元素复制到新数组中
        for (int i = 0; i < students.length; i++) {
            tempStudent[i] = students[i];
        }
        // 将新学生添加到新数组的最后一个位置
        tempStudent[tempStudent.length - 1] = student;
        // 将新数组赋值给原数组
        students = tempStudent;
    }

    //通过学号修改学生信息
    @Override
    public void modifyStudentByNo(int no, String name, double score) {
        // 遍历学生数组，查找指定学号的学生
        if(students.length != 0) {
            for (int i = 0; i < students.length; i++) {
                if (students[i].getNo() == no) {
                    // 找到学生，修改其姓名和成绩
                    students[i].setName(name);
                    students[i].setScore(score);
                    return;
                }
            }
        }
    }

    //通过学号删除学生
    @Override
    public void removeStudentByNo(int no) {
        int index = -1;
        // 遍历学生数组，查找指定学号的学生
        for (int i = 0; i < students.length; i++) {
            if (students[i].getNo() == no) {
                index = i; // 找到学生，记录其索引
                break;
            }
        }
        // 如果没有找到学生，直接返回
        if (index == -1) {
            return;
        }
        // 如果找到了学生，创建一个新的数组，长度为原数组长度-1
        Student[] tempStudent = new Student[students.length - 1];
        for( int i = 0; i < tempStudent.length; i++) {
            if (i < index) {
                // 将原数组中索引小于找到学生的索引的元素复制到新数组
                tempStudent[i] = students[i];
            } else {
                // 将原数组中索引大于找到学生的索引的元素复制到新数组
                tempStudent[i] = students[i + 1];
            }
        }
        // 将新数组赋值给原数组
        students = tempStudent;
    }

    // 获取所有学生信息
    @Override
    public Student[] getAllStudents() {
        return students;
    }
}
